package TCP;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;

/**
 * Day09_Server_Thread类用于创建一个服务器，它可以接受多个客户端的连接，并为每个连接开启一个新的线程处理。
 */
public class Day09_Server_Thread {

    /**
     * 存储所有在线客户端的Socket连接，以便可以向所有客户端发送信息。
     */
    public static List<Socket> onLineSockets = new ArrayList<>();

    /**
     * 主函数，用于启动服务器并处理客户端连接。
     * @param args 命令行参数（未使用）
     */
    public static void main(String[] args) {
        // 尝试创建并启动服务器
        try {
            // 创建一个监听9999端口的ServerSocket
            ServerSocket serverSocket = new ServerSocket(9999);
            System.out.println("服务器架设成功！");

            // 不断循环，等待客户端连接
            while (true) {
                // 接受客户端的连接请求
                Socket socket = serverSocket.accept();

                // 将新连接的客户端Socket添加到在线Socket列表中
                onLineSockets.add(socket);

                // 打印客户端上线信息
                System.out.println(socket.getRemoteSocketAddress() + "上线了！");

                // 为每个客户端连接创建一个新的处理线程，并启动
                Day09_Server_Thread_outclass serverThread = new Day09_Server_Thread_outclass(socket);
                serverThread.start();

            }


        } catch (IOException e) {
            // 打印堆栈跟踪信息，如果出现IO异常
            e.printStackTrace();
        }

    }

}
